
26.10.2014, 21:16
|
Профессор
|
|
Регистрация: 14.09.2012
Сообщений: 158
|
|
распарсить строку json
Здравствуйте.
Я понимаю, что этот вопрос не раз обсуждался, но вот у меня не получается распарсить ответ от сервера:
echo json_encode($result);
var obj = '{"success":1, "return":{
"46081993":{
"pair":"btc_rur", "type":"sell", "amount":0.01, "rate":15500, "order_id":425714310, "is_your_order":1, "timestamp":1414332926},
"46061625":{
"pair":"eur_rur", "type":"buy", "amount":0.1, "rate":53.242, "order_id":424877913, "is_your_order":1, "timestamp":1414264805
}}}';
var data = eval("(" + obj + ")");
Ну а дальше все попытки взять параметры amount и rate равны нулю, то есть не получается. Помогите пожалуйста.
Последний раз редактировалось sotik, 27.10.2014 в 00:05.
|
|

26.10.2014, 21:28
|
 |
Профессор
|
|
Регистрация: 11.09.2010
Сообщений: 8,804
|
|
Есть же JSON.parse()
Сообщение от sotik
|
все попытки взять параметры amount и rate равны нулю
|
Показывай. И еще: отформатируй пробелами свой JSON. Чтоб было видно структуру.
__________________
В личку только с интересными предложениями
|
|

27.10.2014, 00:00
|
Профессор
|
|
Регистрация: 14.09.2012
Сообщений: 158
|
|
Например вот так:
amount = data.return[0].amount;
или
amount = data[1][0].amount;
или
amount = obj.return[0].amount;
В других ответах легко получалось брать например параметр:
btc = data.return.funds.btc;
с помощью json.parse() не пробовал еще.
|
|

27.10.2014, 00:25
|
 |
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,149
|
|
sotik,
var obj = '{"success":1, "return":{"46081993":{"pair":"btc_rur", "type":"sell", "amount":0.01, "rate":15500, "order_id":425714310, "is_your_order":1, "timestamp":1414332926},"46061625":{"pair":"eur_rur", "type":"buy", "amount":0.1, "rate":53.242, "order_id":424877913, "is_your_order":1, "timestamp":1414264805}}}';
var data = eval("(" + obj + ")");
alert(data['return']['46081993'].amount)
|
|

27.10.2014, 01:47
|
Профессор
|
|
Регистрация: 14.09.2012
Сообщений: 158
|
|
Спасибо.
Есть маленькая деталь...
номер сделки ('46081993') заранее не известенпоэтому нужно что-то типа подстановки номера ключа:
alert(data['return'][0].amount)
вместо
alert(data['return']['46081993'].amount)
но оно так не работает...
|
|

27.10.2014, 03:35
|
 |
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,149
|
|
sotik,
кто вам мешает собрать все номера сделок в массив
var obj = '{"success":1, "return":{"46081993":{"pair":"btc_rur", "type":"sell", "amount":0.01, "rate":15500, "order_id":425714310, "is_your_order":1, "timestamp":1414332926},"46061625":{"pair":"eur_rur", "type":"buy", "amount":0.1, "rate":53.242, "order_id":424877913, "is_your_order":1, "timestamp":1414264805}}}';
var data = eval("(" + obj + ")"),
a=[],i=0;
for(a[i++]in data['return']);
alert(data['return'][a[0]].rate)
|
|

27.10.2014, 03:50
|
Профессор
|
|
Регистрация: 14.09.2012
Сообщений: 158
|
|
Сообщение от рони
|
sotik,
кто вам мешает собрать все номера сделок в массив
|
Никто не мешает, а так - отсутствие соответствующих знаний... 
Сейчас вот только прочитал целую статью и понял что именно цикл мне и нужен, но не знал более компактного решения.
Спасибо огромное и удачи во всем. 
|
|

27.10.2014, 06:52
|
 |
Профессор
|
|
Регистрация: 11.09.2010
Сообщений: 8,804
|
|
Сообщение от sotik
|
не знал более компактного решения
|
Я тоже первый раз вижу такое решение)
Сообщение от рони
|
a=[],i=0;
for(a[i++]in data['return']);
|
А вообще не понимаю зачем собирать ключи в массив. Пройдись for..in'ом и делай все что нужно:
(function() {
var response = '{"success":1, "return":{"46081993":{"pair":"btc_rur", "type":"sell", "amount":0.01, "rate":15500, "order_id":425714310, "is_your_order":1, "timestamp":1414332926},"46061625":{"pair":"eur_rur", "type":"buy", "amount":0.1, "rate":53.242, "order_id":424877913, "is_your_order":1, "timestamp":1414264805}}}';
var data = JSON.parse(response);
if (!data.success) {
return alert('Облом');
}
for (var key in data['return']) {
var deal = data['return'][key];
alert(deal.amount);
}
})();
__________________
В личку только с интересными предложениями
|
|

04.11.2014, 10:04
|
Профессор
|
|
Регистрация: 14.09.2012
Сообщений: 158
|
|
Спасибо за еще одно решение.
Теперь хоть знаю как применять:
var data = JSON.parse(response);
Оба решения мне полезны, так как из массива удобнее сравнивать историю сделок с текущими ордерами.
|
|

10.11.2014, 07:52
|
Профессор
|
|
Регистрация: 14.09.2012
Сообщений: 158
|
|
Тут такое дело...
Собрал я номера ордеров в массив, теперь этот массив надо отправить на сервер и там распарсить.
a = {1:33,2:44};
a = JSON.stringify(a);
На серверной стороне:
$a = $_POST[a];
$data = json_decode($a);
Но вот что-то переменная $data не получает эти данные...
Помогите пожалуйста разобраться.
Последний раз редактировалось sotik, 12.11.2014 в 03:04.
|
|
|
|